<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of Statistic
 *
 * @author Admin
 */
class Pub_Model_Statistic extends Zend_Db_Table_Abstract 
{
    protected $_name = 'advertising_spaces';
    /**
     * Выборка всех рекламных мест публикатора
     * @param int $id - id публикатора
     * @return array 
     */
    public function getAllPubAdvSpaces($id) {
        $this->_name = 'advertising_spaces';
        $select = $this->select()
                       ->from($this->_name)
                       ->where('id_publisher =?', intval($id));
        return $this->fetchAll($select)->toArray();
    }
    
    public function getAllAdvSpacesSite($id) {
        $this->_name = 'advertising_spaces';
        $select = $this->select()
                       ->from($this->_name)
                       ->where('id_site =?', intval($id));
        return $this->fetchAll($select)->toArray();
    }
    
    /**
     * Выборка всех активированных/блокированных/не подтвержденных 
     * рекламных мест публикатора, в зависимости от переданного id_status
     * 1 - активный, 2 - блокированый, 3 - не подвтержденный     
     * @param int $id - id публикатора
     * @param int $id_status - id статуса рекламного места
     * @return array 
     */
    public function getPubStatisticAdvSpaces($id, $id_status) {
        $this->_name = 'advertising_spaces';
        $select = $this->select()
                       ->from($this->_name)
                       ->where('id_publisher =?', intval($id))
                       ->where('id_status =?', intval($id_status));
        return $this->fetchAll($select)->toArray();
    }      
    /**
     * Выбор всех сайтов публикатора и их тематик  
     * @return array 
     */
    public function getPubStatisticSite($id_pub) {
        $db = $this->getDefaultAdapter();
        $select = $db->select()
                ->from(array('s' => 'sites'))
                //->join(array('s' => 'sites'), 's.id = tp.id_site', array('s.url', 's.id'))
                ->join(array('csc' => 'category_site_child'), 'csc.id = s.id_category_site', array('csc.name'))
                ->where('s.id_publisher = ?', $id_pub)
                ->where('s.id_status =?', 1);
        return $db->fetchAll($select);
    }
    /**
     * Получаем все записи о доходе за рекламу взависемости от выбранного типа рекламмы
     * @param int $type_adv - id рекламы (банер - 1, контекстная - 3 , видео - 2)
     * @param int $id_pub - id публикатора
     * @param int id_status_transaction - тип транзакции (1 - доход, 2 - выплаты)
     * @return array 
     */
    public function getGain($type_adv, $id_pub, $id_site){
        $this->_name = 'transactions_publishers';
        $select = $this->select()->from($this->_name)
                ->where('id_type_adv = ?', intval($type_adv))
                ->where('id_publisher = ?', intval($id_pub))
                ->where('id_status_transaction = ?', 1)
                ->where('id_site = ?', intval($id_site));
        return $this->fetchAll($select)->toArray();
    }
    
    /**
     * Выборка всех активированных/блокированных/не подтвержденных
     * сайтов публикатора, в зависимости от переданного id_status
     * 1 - активный, 2 - блокированый, 3 - не подвтержденный
     * @param int $id - id публикатора
     * @param int $id_status - id статуса сайта
     * @return array 
     */
    public function getPubStatisticSites($id, $id_status) {
        $this->_name = 'sites';
        $select = $this->select()
                       ->from($this->_name)
                       ->where('id_publisher =?', intval($id))
                       ->where('id_status =?', intval($id_status));
        return $this->fetchAll($select)->toArray();
    } 
    
    /**
     * Выборка всех транзакций за указанный день и месяц
     * @param int $day - день выборки
     * @param int $month - месяц выборки
     * @return array 
     */
    public function getDayPubTransactions($day, $month) {
        $this->_name = 'transactions_publishers';
        $select = $this->select()
                       ->from($this->_name, array('sum(amount)', 'date'))
                       ->where('DAYOFMONTH(date) =?', $day)
                       ->where('MONTH(date) =?', $month)
                       ->where('id_status_payment =?', 1);
        return $this->fetchAll($select)->toArray();
    }
    
    /**
     * Выборка всех транзакций за указанный день и месяц
     * с учетом типа рекламы
     * @param int $day - день выборки
     * @param int $month - месяц выборки
     * @param int $type_adver - тип рекламы
     * @return array 
     */
    public function getDaySelectTransactions($day, $month, $type_adver) {
        $this->_name = 'transactions_publishers';
        $select = $this->select()
                       ->from($this->_name, array('sum(amount)', 'date'))
                       ->where('DAYOFMONTH(date) =?', $day)
                       ->where('MONTH(date) =?', $month)
                       ->where('id_status_payment =?', 1)
                       ->where('id_type_payment =?', intval($type_adver));
        return $this->fetchAll($select)->toArray();
    }    
    /**
     * Выборка всех успешных транзакций
     * id_status_payment - 1 - completed, 2 - rejected
     * @param int $id_pub - id публикатора
     * @return array 
     */
    public function totalGainSite($id_pub, $id_site) {
        $this->_name = 'transactions_publishers';
        $select = $this->select()->from($this->_name)
                ->where('id_publisher = ?', intval($id_pub))
                ->where('id_status_payment = ?', 1)
                ->where('id_site = ?', intval($id_site));
        return $this->fetchAll($select)->toArray();
    }
    /**
     * Выборка транзакций по типу рекламмы
     * @param int $id_pub - id публикатора
     * @param int $id_adv_type - id типа рекламы
     * @param int $id_site - id сайта
     * 1 - банерная, 2 - контекстная
     * id_status_payment - 1 - completed, 2 - rejected
     * @return array 
     */
    public function gainAdv($id_pub, $id_site, $id_adv_type) {
        $this->_name = 'transactions_publishers';
        $select = $this->select()->from($this->_name)
                ->where('id_publisher = ?', intval($id_pub))
                ->where('id_status_payment = ?', 1)
                ->where('id_adv_type = ?', intval($id_adv_type))
                ->where('id_site = ?', intval($id_site));
                
        return $this->fetchAll($select)->toArray();    
      
        
    }
    /**
     * Выборка общего баланса публикатора по всем сайтам
     * @param int $id_pub - id публикатора
     * @return array
     */
    public function generalBalance($id_pub) {
        $this->_name = 'transactions_publishers';
        $select = $this->select()->from($this->_name)
                ->where('id_publisher = ?', intval($id_pub))
                ->where('id_status_payment = ?', 1);
        return $this->fetchAll($select)->toArray();
    }
    
    /**
     * Выборка всех транзакций за указанный период
     * с учетом типа рекламы
     * @param int $dayStart - стартовый день
     * @param int $dayEnd - конечный день
     * @param int $monthStart - стартовый месяц
     * @param int $monthEnd - конечный месяц
     * @param int $yearStart - стартовый год
     * @param int $yearEnd - конечный год
     * @param int $type_adver - тип рекламы
     * @return array 
     */
    public function getSelectPeriodSelectTransactions($dayStart, 
                                                   $dayEnd, 
                                                   $monthStart,
                                                   $monthEnd,
                                                   $yearStart,
                                                   $yearEnd,
                                                   $type_adver) {
        $this->_name = 'transactions_publishers';
        $select = $this->select()
                       ->from($this->_name)
                       ->where('DAYOFMONTH(date) >=?', $dayStart)
                       ->where('MONTH(date) >=?', $monthStart)
                       ->where('YEAR(date) >=?', $yearStart)
                       ->where('DAYOFMONTH(date) <=?', $dayEnd)
                       ->where('MONTH(date) <=?', $monthEnd)
                       ->where('YEAR(date) <=?', $yearEnd)
                       ->where('id_status_payment =?', 1)
                       ->where('id_type_payment =?', intval($type_adver));
        return $this->fetchAll($select)->toArray();
    }
    
    /**
     * Выборка всех транзакций за указанный период
     * @param int $dayStart - стартовый день
     * @param int $dayEnd - конечный день
     * @param int $monthStart - стартовый месяц
     * @param int $monthEnd - конечный месяц
     * @param int $yearStart - стартовый год
     * @param int $yearEnd - конечный год
     * @return array 
     */
    public function getAllSelectPeriodTransactions($dayStart, 
                                          $dayEnd, 
                                          $monthStart,
                                          $monthEnd,
                                          $yearStart,
                                          $yearEnd) {
        $this->_name = 'transactions_publishers';
        $select = $this->select()
                       ->from($this->_name)
                       ->where('DAYOFMONTH(date) >=?', $dayStart)
                       ->where('MONTH(date) >=?', $monthStart)
                       ->where('YEAR(date) >=?', $yearStart)
                       ->where('DAYOFMONTH(date) <=?', $dayEnd)
                       ->where('MONTH(date) <=?', $monthEnd)
                       ->where('YEAR(date) <=?', $yearEnd)
                       ->where('id_status_payment =?', 1);
        return $this->fetchAll($select)->toArray();
    }
    
    public function test () {
        $this->_name = 'transactions_publishers';
        $select = $this->select()
                       ->from($this->_name, array('sum(amount)'))
                       ->where($this->_name.'.date >= ?', '2012-03-01')
                       ->where($this->_name.'.date <= ?', '2012-06-29')
                       ->where('id_status_payment =?', 1);
                       //->where('CURDATE() <= 2012-06-27');
        return $this->fetchAll($select)->toArray();
    }
}

?>
